From: Jonathan Dieter Date: Sat, 18 Jan 2020 21:21:53 +0000 (+0000) Subject: Handle write errors correctly X-Git-Tag: archive/raspbian/1.1.9+ds1-1+rpi1~1^2~31 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=bcb8bcb80f36599431d0d406926493aa311c6d51;p=zchunk.git Handle write errors correctly Signed-off-by: Jonathan Dieter --- diff --git a/src/lib/io.c b/src/lib/io.c index c81317c..5925d51 100644 --- a/src/lib/io.c +++ b/src/lib/io.c @@ -62,11 +62,19 @@ int write_data(zckCtx *zck, int fd, const char *data, size_t length) { } ssize_t write_bytes = write(fd, data, length); if(write_bytes == -1) { - set_error(zck, "Error write data: %s", strerror(errno)); - return false; - } else if(write_bytes != length) { - set_fatal_error(zck, "Short write"); + set_fatal_error(zck, "Error writing data: %s", strerror(errno)); return false; + } else if(write_bytes < length) { + // According to man page, if write is less than full amount, we should try again + length -= write_bytes; + write_bytes = write(fd, data+write_bytes, length); + if(write_bytes == -1) { + set_fatal_error(zck, "Error writing data: %s", strerror(errno)); + return false; + } else if(write_bytes < length) { + set_fatal_error(zck, "Short write (after two attempts)"); + return false; + } } return true; }